home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d949.lha / BBBBS / BBBBS65.lha / rexx / bbsULDL.rexx < prev    next >
OS/2 REXX Batch file  |  1993-07-29  |  6KB  |  253 lines

  1. /* $VER: bbsULDL.rexx 6.1 (29.7.93)
  2. counts upload/download statistics -
  3. copyright 1990-93 Richard Lee Stockton
  4.      - FREELY DISTRIBUTABLE -
  5. */
  6.  
  7. exclude=''  /* directories excluded from the "most popular file" list */
  8. exclude=UPPER(exclude)
  9.  
  10. CALL TIME('R')
  11. HOW_MANY=25
  12. CALL PRAGMA('P',-2)
  13. SIGNAL ON ERROR
  14. SIGNAL ON SYNTAX
  15. SIGNAL ON FAILURE
  16. NUMERIC DIGITS 14
  17.  
  18. inarg=''
  19. PARSE ARG inarg .
  20. test=COMPRESS(UPPER(inarg),' -')
  21. IF test='?' | test='H' | test='USAGE' | test='HELP' THEN
  22.   DO
  23.     SAY 'Usage: rx bbsULDL [filename or CLI]'
  24.     SAY
  25.     SAY 'CLI writes to the console.'
  26.     SAY 'If a filename or the letters CLI are not included,'
  27.     SAY 'writes to a file called Information/STATS.ULDL'
  28.   END
  29.  
  30. IF inarg='' THEN
  31.   DO
  32.     CALL CLOSE(STDOUT)
  33.     CALL OPEN(STDOUT,'RAM:bbsULDL.STDOUT','W')
  34.   END
  35. figarg='s:CONFIG.BBS'
  36. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  37. x=OPEN(f,figarg,'R')
  38. IF x=0 THEN
  39.   DO
  40.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  41.     EXIT(20)
  42.   END
  43.  
  44. CALL SETCLIP('BBS_STAT','ON')
  45. lynes.=''
  46. DO i=1 TO 6
  47.   lynes.i=READLN(f)
  48. END
  49. CALL CLOSE(f)
  50.  
  51. compos=POS('/*',lynes.1)
  52. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  53.  
  54. bbsname = STRIP(lynes.1)
  55. sysop   = WORD(lynes.2,1)
  56. bbspath = WORD(lynes.6,1)
  57. IF ~EXISTS(bbspath) THEN
  58.   DO
  59.     SAY bbspath 'does not exist!'
  60.     CALL SETCLIP('BBS_STAT')
  61.     EXIT(20)
  62.   END
  63. testchar=RIGHT(bbspath,1)
  64. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  65.  
  66. counts.=0
  67. namelist=''
  68. filelist.=''
  69. x=OPEN(f,bbspath'Lists/Files','R')
  70. IF x=0 THEN
  71.   DO
  72.     SAY 'Could not open' bbspath'Lists/Files!'
  73.     CALL SETCLIP('BBS_STAT')
  74.     EXIT(20)
  75.   END
  76. DO i=1
  77.   line=READLN(f)
  78.   IF EOF(f) THEN LEAVE i
  79.   filelist.i=line
  80. END
  81. filelist.0=i-1
  82. CALL CLOSE(f)
  83.  
  84. DO i=1 TO filelist.0
  85.   filenote=bbspath'FileNotes/'WORD(filelist.i,2)'/'WORD(filelist.i,3)
  86.   x=OPEN(f,filenote,'R')
  87.   IF x=0 THEN
  88.     DO
  89.       SAY filenote 'did not open!'
  90.       ITERATE i
  91.     END
  92.   line1=READLN(f)
  93.   line2=READLN(f)
  94.   line3=READLN(f)
  95.   CALL CLOSE(f)
  96.   size=WORD(line2,4)
  97.   dls=WORD(line2,7)
  98.   name=WORD(line3,2)
  99.   IF FIND(namelist,name)=0 THEN namelist=namelist name
  100.   counts.name.BYTES=counts.name.BYTES+size
  101.   counts.TOTAL.BYTES=counts.TOTAL.BYTES+size
  102.   counts.name.ULOADS=counts.name.ULOADS+1
  103.   counts.TOTAL.DLOADS=counts.TOTAL.DLOADS+dls
  104.   filelist.i.0=name
  105.   filelist.i.1=dls
  106.   filelist.i.2=size
  107. END
  108.  
  109. largest.=0
  110. DO nameindex=1 TO WORDS(namelist)
  111.   name=WORD(namelist,nameindex)
  112.   IF counts.name.BYTES>largest.HOW_MANY & name~=UPPER(sysop) THEN
  113.     DO
  114.       line=LEFT(name,20) LEFT(' ',21) RIGHT(comma(counts.name.BYTES),11) 'bytes'RIGHT(comma(counts.name.ULOADS),5) 'files'
  115.       largest.HOW_MANY=counts.name.BYTES
  116.       largest.HOW_MANY.0=line
  117.       DO j=HOW_MANY-1 TO 1 BY -1
  118.         jj=j+1
  119.         IF largest.jj<=largest.j THEN LEAVE j
  120.         temp=largest.jj
  121.         temp0=largest.jj.0
  122.         largest.jj=largest.j
  123.         largest.jj.0=largest.j.0
  124.         largest.j=temp
  125.         largest.j.0=temp0
  126.       END
  127.     END
  128. END
  129.  
  130. popular.=0
  131. DO i=1 TO filelist.0
  132.   IF filelist.i.1>popular.HOW_MANY THEN
  133.     DO
  134.       IF FIND(exclude,UPPER(WORD(filelist.i,2)))>0 THEN ITERATE i
  135.       name=WORD(filelist.i,3)
  136.       line=RIGHT(filelist.i.1,4) LEFT(name,22) RIGHT(WORD(filelist.i,1),5) LEFT(WORD(filelist.i,2),18) LEFT(filelist.i.0,20)
  137.       popular.HOW_MANY=filelist.i.1
  138.       popular.HOW_MANY.0=line
  139.       DO j=HOW_MANY-1 TO 1 BY -1
  140.         jj=j+1
  141.         IF popular.jj<=popular.j THEN LEAVE j
  142.         temp=popular.jj
  143.         temp0=popular.jj.0
  144.         popular.jj=popular.j
  145.         popular.jj.0=popular.j.0
  146.         popular.j=temp
  147.         popular.j.0=temp0
  148.       END
  149.     END
  150. END
  151.  
  152.  
  153.  
  154. /* OUTPUT */
  155.  
  156. IF inarg='' THEN inarg=bbspath'Information/STATS.ULDL'
  157. IF UPPER(inarg)~='CLI' THEN
  158.   DO
  159.     CALL CLOSE(STDOUT)
  160.     CALL OPEN(STDOUT,inarg,'W')
  161.     IF x=0 THEN
  162.       DO
  163.         SAY inarg 'would not open for writing!'
  164.         CALL SETCLIP('BBS_STAT')
  165.         EXIT(20)
  166.       END
  167.   END
  168.  
  169. SAY LEFT('-',75,'-')
  170. SAY TRIM(CENTER('Upload/Download statistics through' DATE() 'at' TIME('C'),75))
  171. SAY TRIM(CENTER(bbsname,75))
  172. SAY TRIM(CENTER(comma(counts.TOTAL.BYTES) 'bytes in' comma(filelist.0) 'files uploaded by' comma(WORDS(namelist)) 'of' comma(WORDS(SHOWDIR(bbspath'Users'))) 'current users.',75))
  173. SAY LEFT('-',75,'-')
  174.  
  175. SAY
  176. SAY
  177. SAY CENTER('Top' HOW_MANY 'favorite files from' comma(counts.TOTAL.DLOADS) 'total downloads',75)
  178. SAY LEFT('-',75,'-')
  179. SAY '  DLoads' LEFT('Filename',22) 'File#' LEFT('Library',18) LEFT('Uploader',20)
  180. SAY LEFT('-',75,'-')
  181. DO i=1 TO HOW_MANY
  182.   IF popular.i=0 THEN LEAVE i
  183.   SAY RIGHT(i,2)'.' popular.i.0
  184. END
  185.  
  186. SAY
  187. SAY
  188. SAY CENTER('Top' HOW_MANY 'uploaders of files currently in the libraries (excludes sysop)',75)
  189. SAY LEFT('-',75,'-')
  190. DO i=1 TO HOW_MANY
  191.   IF largest.i=0 THEN LEAVE i
  192.   x=OPEN(f,bbspath'Users/'STRIP(WORD(largest.i.0,1)),'R')
  193.   IF x=0 THEN ITERATE i
  194.   CALL READLN(f)
  195.   CALL READLN(f)
  196.   city=READLN(f)
  197.   CALL CLOSE(f)
  198.   city=TRANSLATE(city,'     ','+-.*/')
  199.   DO j=WORDS(city) TO 1 BY -1
  200.     IF DATATYPE(WORD(city,j),'N') THEN city=STRIP(DELWORD(city,j,1))
  201.     IF UPPER(WORD(city,j))='USA' THEN city=STRIP(DELWORD(city,j,1))
  202.   END
  203.   city=SPACE(city,1)
  204.   SAY RIGHT(i,2)'.' OVERLAY(city,largest.i.0,22,21)
  205. END
  206. SAY
  207. t=(.5+TIME('E'))%1
  208. min=t%60
  209. hrs=min%60
  210. min=min//60
  211. sec=t//60
  212. temp=' - It took'
  213. IF hrs>1 THEN temp=temp hrs 'hours'
  214. ELSE IF hrs=1 THEN temp=temp '1 hour'
  215. IF min>1 THEN temp=temp min 'minutes'
  216. ELSE IF min=1 THEN temp=temp '1 minute'
  217. temp=temp sec 'seconds to compile this report. -'
  218. SAY temp
  219. SAY
  220. CALL SETCLIP('BBS_STAT')
  221. EXIT;
  222.  
  223.  
  224. comma:
  225. ARG num .
  226. dgt=LENGTH(num)
  227. numtext=''
  228. IF dgt>3 THEN numtext=','RIGHT(num,3)
  229. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  230. IF dgt>9 THEN
  231.   DO
  232.     numtext=','LEFT(RIGHT(num,9),3)||numtext
  233.     numtext=LEFT(num,dgt-9)||numtext
  234.   END
  235. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  236. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  237. ELSE numtext=num
  238. RETURN(numtext)
  239.  
  240.  
  241. SYNTAX:
  242. FAILURE:
  243. ERROR:
  244. SAY 'Line:' SIGL ERRORTEXT(RC)
  245. SAY
  246. SAY line1
  247. SAY line2
  248. SAY line3
  249. CALL SETCLIP('BBS_STAT')
  250. EXIT;
  251.  
  252. /* end of uldl.rexx */
  253.